home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.4)
-
- '''Database management framework.
- '''
- import sys
- from spambayes.storage import ZODBClassifier
- from spamexperts.Options import options
-
- class baseDBWrapper:
- '''
- This simple wrapper is found all over the spamexperts/spambayes code
- Finally now as a base class
- '''
-
- def __init__(self, db_name, mode = 'c'):
- self.db_name = db_name
- self.mode = mode
- self.load()
-
-
- def load(self):
-
- try:
- self.dbm = open(self.db_name, self.mode)
- self.db = shelve.Shelf(self.dbm)
- except error:
- print >>sys.stderr, 'Warning: no dbm modules available for MessageInfoDB'
- self.dbm = None
- self.db = None
-
-
-
- def __del__(self):
- self.close()
-
-
- def close(self):
-
- def noop():
- pass
-
- getattr(self.db, 'close', noop)()
- getattr(self.dbm, 'close', noop)()
-
-
- def store(self):
- if self.db is not None:
- self.db.sync()
-
-
-
- def add(self, key, *args):
- self.db[key] = args
- self.store()
-
-
- def get(self, key):
- return self.db[key]
-
-
- def set(self, key, *args):
- pass
-
-
- def remove(self, key):
- del self.db[key]
- self.store()
-
-
- def has_key(self, key):
- return self.db.has_key(key)
-
-
- def keys(self):
- return self.db.keys()
-
-
- def items(self):
- return self.db.items()
-
-
- def values(self):
- return self.db.values()
-
-
- def first(self):
- return self.dbm.first()
-
-
- def len(self):
- return len(self.dbm.keys())
-
-
- def __contains__(self, key):
- return self.db.has_key(key)
-
-
- def __getitem__(self, key):
- return self.db[key]
-
-
- def __setitem__(self, key, value):
- self.db[key] = value
-
-
-
- class TransitMessagesBase(object):
- '''Keep track of information about messages that are in the corpus, and
- are in transit somehow (blocked, waiting to be put on an IMAP server,
- waiting to be delivered to a POP client, etc).'''
-
- def addMessage(self, account, msgid, msginfo):
- '''Add a message to the database.'''
- if options[('globals', 'verbose')]:
- print >>sys.stderr, 'Adding message %s' % (msgid,)
-
- self_messages = self.get(account)
- self_messages[msgid] = msginfo
- self.db[account] = self_messages
- self.store()
-
-
- def takeMessage(self, account, msgid, fromdb):
- '''Move a message from the given database to this one.'''
- from_messages = fromdb.get(account)
- if options[('globals', 'verbose')]:
- print >>sys.stderr, 'Message info %s' % (from_messages[msgid],)
-
- self.addMessage(account, msgid, from_messages[msgid])
- fromdb.removeMessageFromDB(account, msgid)
-
-
- def removeMessageFromDB(self, account, msgid):
- '''Remove message with given msgid from given account database.'''
- messages = self.get(account)
- if messages.has_key(msgid):
- del messages[msgid]
- self.db[account] = messages
- self.store()
-
-
-
-
- class TransitMessagesDB(TransitMessagesBase, baseDBWrapper):
- pass
-
-
- try:
- from persistent import Persistent
- except ImportError:
- Persistent = object
-
-
- class _PersistentTransitMessages(TransitMessagesBase, Persistent):
-
- def __init__(self):
- import ZODB
- OOBTree = OOBTree
- import BTrees.OOBTree
- TransitMessagesBase.__init__(self)
- self.db = OOBTree()
-
-
- def __getstate__(self):
- return self.db
-
-
- def __setstate__(self, state):
- self.db = state
-
-
-
- class TransitMessagesZODB(ZODBClassifier):
- ClassifierClass = _PersistentTransitMessages
-
- def __init__(self, db_name):
- self.nham = self.nspam = 0
- ZODBClassifier.__init__(self, db_name)
- self.classifier.store = self.store
- self.classifier.get = self.get
-
-
- def __setattr__(self, att, value):
- object.__setattr__(self, att, value)
-
-
- def __contains__(self, key):
- return self.classifier.db.has_key(key)
-
-
- def has_key(self, key):
- return self.classifier.db.has_key(key)
-
-
- def __getitem__(self, key):
- return self.classifier.db[key]
-
-
- def __setitem__(self, key, value):
- self.classifier.db[key] = value
-
-
- def get(self, key):
- return self.classifier.db[key]
-
-
-